//package com.ssd.emq;
//
//import lombok.Data;
//import lombok.extern.slf4j.Slf4j;
//import org.eclipse.paho.client.mqttv3.MqttClient;
//import org.eclipse.paho.client.mqttv3.MqttClientPersistence;
//import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
//import org.eclipse.paho.client.mqttv3.MqttException;
//import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.stereotype.Component;
//
///**
// * 配置和初始化MQTT客户端
// */
//@Configuration
//@Component
//@Data
//@Slf4j
//public class MqttConfig {
//    //通过 @Value 注解从配置文件中读取MQTT客户端的相关配置信息，如用户名、密码、服务器URI、客户端ID等
//    @Value("${mqtt.client.username}")
//    private String username;
//    @Value("${mqtt.client.password}")
//    private String password;
//    @Value("${mqtt.client.serverURI}")
//    private String serverURI;
//    @Value("${mqtt.client.clientId}")
//    private String clientId;
//    @Value("${mqtt.client.keepAliveInterval}")
//    private int keepAliveInterval;
//    @Value("${mqtt.client.connectionTimeout}")
//    private int connectionTimeout;
//
//    //回调设置：MQTT客户端的回调
//    @Autowired
//    private MqttCallback mqttCallback;
//
//    /**
//     * 创建MQTT客户端,设置手动消息接收确认，并连接到MQTT服务器
//     * @return
//     */
//    @Bean
//    public MqttClient mqttClient() {
//        try {
//            //1.创建MqttClient实例
//            MqttClient client = new MqttClient(serverURI, clientId, mqttClientPersistence());
//            //2.设置手动消息接收确认
//            client.setManualAcks(true); //设置手动消息接收确认
//            //3.设置回调
//            mqttCallback.setMqttClient(client);
//            //4.注册自定义的MqttCallback实例，以便在消息到达时触发相应的回调方法
//            client.setCallback(mqttCallback);
//            //5.连接服务器
//            client.connect(mqttConnectOptions());
//            return client;
//        } catch (MqttException e) {
//            log.error("emq connect error",e);
//            return null;
//        }
//    }
//
//    /**
//     * 配置MQTT连接参数：包括用户名、密码、自动重连、清理会话、连接超时时间和心跳间隔等。
//     * @return
//     */
//    @Bean
//    public MqttConnectOptions mqttConnectOptions() {
//        MqttConnectOptions options = new MqttConnectOptions();
//        options.setUserName(username);
//        options.setPassword(password.toCharArray());
//        options.setAutomaticReconnect(true);//是否自动重新连接
//        options.setCleanSession(true);//是否清除之前的连接信息
//        options.setConnectionTimeout(connectionTimeout);//连接超时时间
//        options.setKeepAliveInterval(keepAliveInterval);//心跳
//        options.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1_1);//设置mqtt版本
//
//        return options;
//    }
//
//    /**
//     *  配置MQTT客户端的持久化方式，这里使用内存方式。
//     * @return
//     */
//    public MqttClientPersistence mqttClientPersistence() {
//        return new MemoryPersistence();
//    }
//
//}
